﻿''' <summary>
''' Fichero que contiene la clase Torneo
''' </summary>
''' <author>Juan David Cabezuelo, Arturo Sirvent, Fermín Martínez, Eugenio Cañete y Pablo Vicedo</author>
Public Class Torneo

    Private _Nombre As String 'nombre torneo longitud máxima 30 caracteres y (requerido)
    Private _Tipo As String '(requerido)
    Private _FechaInicioInscripcion As Date 'marca el comienzo de las incripciones (requerido)
    Private _FechaFinInscripcionInicioPartidos As Date 'marca el fin de las incripciones y comienzo de los partido (requerido)
    Private _FechaFinTorneo As Date 'marcha el final de los partidos
    Private _NRondas As Byte ' uno o dos rondas (requerido)

    ''' <summary>
    ''' COnstructor vacío
    ''' </summary>
    ''' <remarks></remarks>
    Public Sub New()
        Me._Nombre = ""
        Me._Tipo = ""
        Me._FechaInicioInscripcion = #1/1/1000#
        Me._FechaFinInscripcionInicioPartidos = #1/1/1000#
        Me._FechaFinTorneo = #1/1/1000#
        Me._NRondas = 0
    End Sub

    ''' <summary>
    ''' Constructor que se encarga de inicializar las variables
    ''' </summary>
    ''' <param name="nombre"></param>
    ''' <param name="tipo"></param>
    ''' <param name="fechaII"></param>
    ''' <param name="fechaFI"></param>
    ''' <param name="fechaFT"></param>
    ''' <param name="nRondas"></param>
    ''' <remarks></remarks>
    Public Sub New(nombre As String, tipo As String, fechaII As Date, fechaFI As Date, fechaFT As Date, nRondas As Byte)
        'validación de que la forma de los datos sea correcta
        If ValidarCadena(nombre, 30, True) Then
            Me._Nombre = nombre
        Else
            Throw New ArgumentException("El nombre no puede estar vacío no superar los 30 caracteres")
        End If

        If tipo = "Liga" Or tipo = "Torneo" Or tipo = "Mixto" Then
            Me._Tipo = tipo
        Else
            Throw New ArgumentException("El tipo de torneo debe ser 'Liga' 'Torneo' o 'Mixto'")
        End If

        'falta validar las fechas para que no sean anteriores a la fecha actual para que
        'no se puedad dar de alta un torneo con fecha de ayer ni anteriores
        Me._FechaInicioInscripcion = fechaII
        Me._FechaFinInscripcionInicioPartidos = fechaFI
        Me._FechaFinTorneo = fechaFT

        If nRondas = 1 Or nRondas = 2 Then
            Me._NRondas = nRondas
        Else
            Throw New ArgumentException("El número de rondas debe ser 1 o 2")
        End If

        '****************************PARTE INSERCIÓN EN LA BASE DE DATOS***********************
        Dim miBD = New BaseDatos()
        Dim filasAfectadas As Integer
        filasAfectadas = miBD.InsertarModificarBorrar("INSERT INTO Torneos(Nombre, Tipo, FechaInicioInscripcion," & _
                      "FechaFinInscripcion, FechaFinTorneo, NRondas,Accesible)" & _
                      "VALUES('" & Me._Nombre & "' , '" & Me._Tipo & "' , '" & Me._FechaInicioInscripcion & "' , '" & _
                      Me._FechaFinInscripcionInicioPartidos & "' , '" & Me._FechaFinTorneo & "' , " & nRondas & " , " & -1 & ")")
        If filasAfectadas = 0 Then
            Throw New ArgumentException("Error al guardar el torneo en la base de datos")
        Else
            MsgBox("Se ha insertado " & filasAfectadas & " torneo")
        End If
    End Sub

    ''' <summary>
    ''' Función que se encarga de actualizar el torneo
    ''' </summary>
    ''' <param name="nombre"></param>
    ''' <param name="tipo"></param>
    ''' <param name="fechaIniciIncripcion"></param>
    ''' <param name="fechaFinInscripcionInicioPartidos"></param>
    ''' <param name="fechaFinTorneo"></param>
    ''' <param name="numeroRondas"></param>
    ''' <param name="id"></param>
    ''' <remarks></remarks>
    Public Sub Actualizar(ByVal nombre As String, ByVal tipo As String, ByVal fechaIniciIncripcion As Date, _
                         ByVal fechaFinInscripcionInicioPartidos As Date, ByVal fechaFinTorneo As Date, _
                         ByVal numeroRondas As Byte, ByVal id As Integer)

        If Not ValidarCadena(nombre, 30, True) Then
            Throw New ArgumentException("El nombre no puede estar vacío no superar los 30 caracteres")
        End If

        If tipo <> "Liga" And tipo <> "Torneo" And tipo <> "Mixto" Then
            Throw New ArgumentException("El tipo de torneo debe ser 'Liga' 'Torneo' o 'Mixto'")
        End If

        'falta validar las fechas para que no sean anteriores a la fecha actual para que
        'no se puedad dar de alta un torneo con fecha de ayer ni anteriores

        If numeroRondas <> 1 And numeroRondas <> 2 Then
            Throw New ArgumentException("El número de rondas debe ser 1 o 2")
        End If

        '****************************PARTE MODIFICACIÓN EN LA BASE DE DATOS***********************
        Dim miBD = New BaseDatos()
        Dim filasAfectadas As Integer
        filasAfectadas = miBD.InsertarModificarBorrar("UPDATE Torneos SET Nombre='" & nombre & "', Tipo='" & tipo & _
                                                      "', FechaIniciIncripcion='" & fechaIniciIncripcion & _
                                                      "', FechaFinInscripcionInicioPartidos='" & fechaFinInscripcionInicioPartidos & _
                                                      "', FechaFinTorneo='" & fechaFinTorneo & _
                                                      "', NumeroRondas = " & numeroRondas & "' WHERE Id = " & id & ";")
        If filasAfectadas = 0 Then
            Throw New ArgumentException("Error al modificar torneo en la base de datos")
        Else
            MsgBox("Se ha actualizado " & filasAfectadas & " torneo")
        End If
    End Sub

    ''' <summary>
    ''' Función que se encarga de eliminar un torneo de la base de datos
    ''' </summary>
    ''' <param name="id"></param>
    ''' <remarks></remarks>
    Public Sub Eliminar(ByVal id As Integer)
        Dim miBD = New BaseDatos()
        Dim filasAfectadas As Integer
        filasAfectadas = miBD.InsertarModificarBorrar("UPDATE Torneos SET Accesible=0 WHERE Id = " & id & ";")
        If filasAfectadas = 0 Then
            Throw New ArgumentException("Error al eliminar el torneo en la base de datos")
        Else
            MsgBox("Se ha eliminado " & filasAfectadas & " torneo")
        End If
    End Sub

    ''' <summary>
    ''' Función que se encargad de añadir los torneos a la base de datos
    ''' </summary>
    ''' <param name="idCampeonato"></param>
    ''' <param name="idEquipo"></param>
    ''' <remarks></remarks>
    Public Sub AnyadirEquiposAlTorneo(ByVal idCampeonato As Integer, ByVal idEquipo As Integer)
        Dim miBd = New BaseDatos()
        Dim filasAfectadas As Integer
        filasAfectadas = miBd.InsertarModificarBorrar("INSERT INTO Participar(IdTorneo, IdEquipo)" & _
                                                    "VALUES(" & idCampeonato & " , " & idEquipo & " )")
        If filasAfectadas = 0 Then
            Throw New ArgumentException("Error al añadir equipos al torneo en la base de datos")
        End If
    End Sub

    Public Property Nombre As String
        Get
            Return Me._Nombre
        End Get
        Set(value As String)
            If ValidarCadena(value, 30, True) Then
                Me._Nombre = value
            Else
                Throw New ArgumentException("El nombre no puede estar vacío no superar los 30 caracteres")
            End If
        End Set
    End Property

    Public Property Tipo As String
        Get
            Return Me._Tipo
        End Get
        Set(value As String)
            If value = "Liga" Or value = "Torneo" Or value = "Mixto" Then
                Me._Tipo = value
            Else
                Throw New ArgumentException("El tipo de torneo debe ser 'Liga' 'Torneo' o 'Mixto'")
            End If
        End Set
    End Property

    Public Property FechaIniciIncripcion As Date
        Get
            Return Me._FechaInicioInscripcion
        End Get
        Set(value As Date)
            Me._FechaInicioInscripcion = value 'Falta validación
        End Set
    End Property

    Public Property FechaFinInscripcionInicioPartidos As Date
        Get
            Return Me._FechaFinInscripcionInicioPartidos 'Falta validación
        End Get
        Set(value As Date)
            Me._FechaFinInscripcionInicioPartidos = value
        End Set
    End Property

    Public Property FechaFinTorneo As Date
        Get
            Return Me._FechaFinTorneo
        End Get
        Set(value As Date)
            Me._FechaFinTorneo = value
        End Set
    End Property

    Public Property NumeroRondas As Byte
        Get
            Return Me._NRondas
        End Get
        Set(value As Byte)
            If value = 1 Or value = 2 Then
                Me._NRondas = value
            Else
                Throw New ArgumentException("El número de rondas debe ser 1 o 2")
            End If
        End Set
    End Property

    ''' <summary>
    ''' Función encargada de mostrar todos los datos de los torneos.
    ''' </summary>
    ''' <returns></returns>
    ''' <remarks></remarks>
    Public Overrides Function ToString() As String
        Return Me._Nombre & "#" & Me._Tipo & "#" & CStr(Me.FechaIniciIncripcion) & "#" & _
                CStr(Me._FechaFinInscripcionInicioPartidos) & "#" & _
                CStr(Me._FechaInicioInscripcion)
    End Function

    ''' <summary>
    ''' Destructor
    ''' </summary>
    ''' <remarks></remarks>
    Public Sub Dispose()
        Me._Nombre = ""
        Me._Tipo = ""
        Me._FechaInicioInscripcion = #1/1/1000#
        Me._FechaFinInscripcionInicioPartidos = #1/1/1000#
        Me._FechaFinTorneo = #1/1/1000#
        Me._NRondas = 0
    End Sub

    ''' <summary>
    ''' Destructor
    ''' </summary>
    ''' <remarks></remarks>
    Protected Overrides Sub finalize()
        Me._Nombre = ""
        Me._Tipo = ""
        Me._FechaInicioInscripcion = #1/1/1000#
        Me._FechaFinInscripcionInicioPartidos = #1/1/1000#
        Me._FechaFinTorneo = #1/1/1000#
        Me._NRondas = 0
    End Sub
End Class
